From 679ecf1f0117d20b62fb18f7965c52658cb66219 Mon Sep 17 00:00:00 2001 From: oliskoli Date: Thu, 9 Feb 2006 19:07:36 +0000 Subject: [PATCH] Fix Memory leaks. Don't allocate zero-length strings. --- gtm.c | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/gtm.c b/gtm.c index 50166ab7f..db9cc890a 100644 --- a/gtm.c +++ b/gtm.c @@ -112,7 +112,11 @@ static char * fread_string(FILE *fd) { int len = fread_integer(fd); - char *val = xmalloc(len+1); + char *val; + + if (len == 0) return NULL; + + val = xmalloc(len+1); fread(val, 1, len, fd); while (len != 0 && val[len-1] == ' ') len--; @@ -120,6 +124,15 @@ fread_string(FILE *fd) return val; } +static void +fread_string_discard(FILE *fd) +{ + char *temp = fread_string(fd); + if (temp != NULL) { + xfree(temp); + } +} + static char * fread_fixedstring(FILE *fd, int len) { @@ -436,7 +449,7 @@ gtm_rd_init(const char *fname) fatal(MYNAME ": Invalid file format\n"); if (version != 211) fatal(MYNAME ": Invalid format version\n"); - free(name); + xfree(name); /* Header */ fread_discard(fd, 15); @@ -449,10 +462,10 @@ gtm_rd_init(const char *fname) im_count = fread_long(fd); ts_count = fread_long(fd); fread_discard(fd, 28); - fread_string(fd); - fread_string(fd); - fread_string(fd); - fread_string(fd); + fread_string_discard(fd); + fread_string_discard(fd); + fread_string_discard(fd); + fread_string_discard(fd); /* User Grid and Datum */ fread_discard(fd, 34); @@ -544,8 +557,8 @@ gtm_read(void) /* Image information */ for (i = 0; i != im_count; i++) { - fread_string(fd); - fread_string(fd); + fread_string_discard(fd); + fread_string_discard(fd); fread_discard(fd, 30); } @@ -576,7 +589,7 @@ gtm_read(void) if (wp_count) { for (i = 0; i != ws_count; i++) { fread_discard(fd, 4); - fread_string(fd); + fread_string_discard(fd); fread_discard(fd, 24); } } @@ -638,7 +651,7 @@ gtm_read(void) route_add_head(rte_head); } else { - free(route_name); + xfree(route_name); } route_add_wpt(rte_head, wpt); } -- 2.30.2